/*
Copyright (c) [2019年5月1日] [吴超]
[MBT_Studio] is licensed under Mulan PSL v2.
You can use this software according to the terms and conditions of the Mulan PSL v2.
You may obtain a copy of Mulan PSL v2 at:
		 http://license.coscl.org.cn/MulanPSL2
THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
See the Mulan PSL v2 for more details.
*/
#pragma once

#include <UI/UI.h>
#include "框架/屏幕.h"




class C_3D场景视口 : public C_Widget {

public:
	C_3D场景视口(S_UI创建环境& ctx);
	~C_3D场景视口();

	ui_绘制模板_画预设图形	m_旋转缩放线绘制;
	ui_绘制模板_画预设图形	m_背景绘制;
	ui_绘制模板_画预设图形	m_背景线绘制;
	//ui_绘制模板_行文本绘制	m_标签绘制;


	C_Widget* ui_三维视口;
	C_Widget* ui_操作图形层;

	bool	m_是否开启视线旋转物体;
	float32	m_旋转度;

	static bool  g视口摄像机旋转;
	static bool  g鼠标左键是否按下;
	static uint8 g视口摄像机平移;

	static uint8 g_移动视口_鼠标左键;
	static uint8 g_移动视口_键盘按键;
	static uint8 g_移动视口_鼠标中键;

	static std::vector<C_Widget*> gui_3D视口;

	//ivec2	m_帧区;
	//int32	m_当前帧;
	//void	f_刷新时间帧绘制();
	void	f_旋转辅助线绘制(vec2 中心坐标, float32 角度弧度, float32 长度);
	void	f_缩放辅助线绘制(vec2 中心坐标, float32 角度弧度, float32 长度);

	void	f_关闭虚拟线绘制();
	void	f_设置渲染方式(uint8 id);
	void f_渲染();
};




void f_view3d_重构状态条(C_状态条* 状态条, C_Widget* 三维视口);
void f_view3d_重构属性栏(C_属性栏* plane, std::vector<S_物体*> obs, C_Widget* 三维视口);


bool f_view3d_射线选中物体(const vec3& s, const vec3& e, bool 多选物体, S_摄像机* camera);
bool f_view3d_射线选中网格元素(const vec3& s, const vec3& e, bool 多选物体, S_摄像机* camera);
bool f_view3d_射线选中骨骼元素(const vec3& s, const vec3& e, bool 多选物体, S_摄像机* camera);


bool f_view3d_物体编辑模式_键盘事件(const S_键盘& ks);
bool f_view3d_骨骼编辑模式_键盘事件(C_Widget* self, const S_键盘& ks, S_UI创建环境& ctx, S_摄像机* camera);

void f_view3d_设置激活物体焦点(bool 激活);



void f_view3d_骨骼状态切换(uint8 状态);
void f_view3d_切换物体线显示();
void f_view3d_切换物体面显示();
void f_view3d_切换物体纹理显示();
void f_view3d_切换物体渲染显示();



